// 引入mime模块，设置响应头
const mime = require('mime');
// 引入模板引擎，动态渲染页面
const template = require('art-template');
// 引入URL模块，解析url便于提取查询串
const url = require('url');
const queryString = require('querystring');
// 引入fs模块读取文件数据
const fs = require('fs');
// 引入path模块格式化文件路径
const path = require('path');
// 引入工具模块
const tools = require('./tools');

const handler = {
    routeToIndex(req, res) {
        tools.readData((obj) => {
            // 对数组进行排序
            obj.list.sort((a, b) => b.id - a.id);

            // 2.关联模板和数据，得到串
            let str = template(path.join(__dirname, 'views', 'index.html'), obj);
            // 3.返回串
            res.setHeader('content-type', 'text/html');
            res.end(str);
        });
    },
    routeToDetails(req, res) {
        let id = url.parse(req.url, true).query.id;

        // 动态渲染details页面

        tools.readData((obj) => {
            let obj_id = obj['list'].find(v => {
                if (v.id == id) {
                    return true;
                }
            });
            let str = template(path.join(__dirname, 'views', 'details.html'), obj_id);
            res.setHeader('content-type', 'text/html');
            res.end(str);
        });
    },
    routeToSubmit(req, res) {
        fs.readFile(path.join(__dirname, 'views', 'submit.html'), (err, data) => {
            if (err) {
                return console.log('文件读取失败', err);
            }
            res.setHeader('content-type', 'text/html');
            res.end(data);
        });
    },
    routeToGET(res, req) {
        // 读取get提交 查询串的数据(url.parse被废弃了...)
        let myURL = new URL(path.join(__dirname, req.url));
        console.log(myURL);

        let info = {};
        // searchParams对象..封装了一系列处理URL的方法...
        myURL.searchParams.forEach((v, k) => {
            info[k] = v;
        });
        console.log(info);

        tools.readData((data) => {
            // 给新获取到的数据添加id属性
            info.id = data.list[data.list.length - 1].id + 1;

            // 更新数据库
            data.list.push(info);

            // 数据转成json串写回数据库
            data = JSON.stringify(data, null, 4);

            tools.writeData(data, () => {
                // 设置状态码，在跳转之前必须设置(跳转啥的是服务器通知浏览器做的事情)
                res.statusCode = 302;
                //跳转到首页
                res.setHeader('location', '/index');
                res.end();
            });

        });
    },
    routeToPOST(res, req) {
        let str = '';
        req.on('data', (chunk) => {
            str += chunk;
        });

        req.on('end', () => {
            console.log(str); //传输的数据已经全部获取
            let info = queryString.parse(str);
            // 将info对象存储到普通对象中
            let info_obj = {};
            for (const key in info) {
                info_obj[key] = info[key];
            }

            tools.readData((data) => {
                info_obj['id'] = data.list[data.list.length - 1].id + 1;

                // 插入新数据
                data.list.push(info_obj);
                // 将数据编码后重新写入数据库
                data = JSON.stringify(data, null, 4);

                tools.writeData(data, () => {
                    // 设置状态码跳转
                    res.statusCode = 302;
                    // 设置响应头
                    res.setHeader('location', '/index');

                    res.end();
                });
            });
        });
    },
    routeToAssets(res, req) {
        fs.readFile(path.join(__dirname, req.url), (err, data) => {
            if (err) {
                return console.log('文件读取失败', err);
            }
            res.setHeader('content-type', mime.getType(req.url));
            res.end(data);
        });
    },
    routeTo404(res, req) {
        res.setHeader('content-type', 'text/html');
        res.end('资源走丢了');
    }

}

module.exports = handler;